A typical 3D graphics system employs a pipelined data rendering scheme including two stages: a geometry stage, and a rasterizer stage. Rendering stages often include a collection of fixed function rendering units as well as more general purpose geometry and pixel processing units capable of employing “shaders” to perform specific rendering calculations. Applications or graphics drivers frequently use shaders in conjunction with the general purpose units to directly implement standard 3D pipeline rendering stages. For example, geometry stages commonly use fixed function clip set up units to determine, in a process known as “3D frustum clipping,” which of the rendering primitives (e.g., points, lines, triangles) provided by the application or graphics driver will eventually be displayed. Such clipping is typically done in 3D space using a trapezoidal shaped view volume known as a view frustum. When a clip set up unit determines that a triangle primitive lies partially within the view frustum the unit will typically employ a clipper shader to calculate the points of intersection between the edges of that triangle and the view frustum and, ultimately, a new set of clip vertices lying at those points.
3D performance is frequently optimized by the use of triangle strip and/or fan primitives where two or more triangles share a common edge and thus have vertex information common to more than one triangle. When a typical geometry stage's clip set up unit or module undertakes frustum clipping for triangle strip and/or fan primitives the fact that edges are shared between triangles is ignored. This means that a typical clipper shader will undertake separate, redundant calculations for adjoining triangles generating two identical clip vertices along the shared edge between the triangles.